bitkeeper revision 1.1236.32.1 (4235db7asX6jSkYD5v9LR5aXTXVuVg)
authormafetter@fleming.research <mafetter@fleming.research>
Mon, 14 Mar 2005 18:44:10 +0000 (18:44 +0000)
committermafetter@fleming.research <mafetter@fleming.research>
Mon, 14 Mar 2005 18:44:10 +0000 (18:44 +0000)
Bug fix for debugtrace_dump stuff.

Signed-off-by: michael.fetterman@cl.cam.ac.uk
xen/drivers/char/console.c

index 03314d679303c2d3ee4c82e828d192b48d564f75..be5b2fcc36f96f35ff3bb5dea3dd88c5021d8cd3 100644 (file)
@@ -511,7 +511,10 @@ void debugtrace_dump(void)
 
     spin_lock_irqsave(&debugtrace_lock, flags);
 
+    printk("debugtrace_dump() starting\n");
+
     /* Print oldest portion of the ring. */
+    ASSERT(debugtrace_buf[debugtrace_bytes - 1] == 0);
     serial_puts(sercon_handle, &debugtrace_buf[debugtrace_prd]);
 
     /* Print youngest portion of the ring. */
@@ -520,6 +523,8 @@ void debugtrace_dump(void)
 
     memset(debugtrace_buf, '\0', debugtrace_bytes);
 
+    printk("debugtrace_dump() finished\n");
+
     spin_unlock_irqrestore(&debugtrace_lock, flags);
 
     watchdog_on = _watchdog_on;
@@ -538,6 +543,8 @@ void debugtrace_printk(const char *fmt, ...)
 
     spin_lock_irqsave(&debugtrace_lock, flags);
 
+    ASSERT(debugtrace_buf[debugtrace_bytes - 1] == 0);
+
     va_start(args, fmt);
     (void)vsnprintf(buf, sizeof(buf), fmt, args);
     va_end(args);
@@ -563,20 +570,24 @@ void debugtrace_printk(const char *fmt, ...)
 static int __init debugtrace_init(void)
 {
     int order;
-    unsigned int kbytes;
+    unsigned int kbytes, bytes;
 
     /* Round size down to next power of two. */
     while ( (kbytes = (debugtrace_kilobytes & (debugtrace_kilobytes-1))) != 0 )
         debugtrace_kilobytes = kbytes;
 
-    debugtrace_bytes = debugtrace_kilobytes << 10;
-    if ( debugtrace_bytes == 0 )
+    bytes = debugtrace_kilobytes << 10;
+    if ( bytes == 0 )
         return 0;
 
-    order = get_order(debugtrace_bytes);
+    order = get_order(bytes);
     debugtrace_buf = (unsigned char *)alloc_xenheap_pages(order);
     ASSERT(debugtrace_buf != NULL);
 
+    memset(debugtrace_buf, '\0', bytes);
+
+    debugtrace_bytes = bytes;
+
     return 0;
 }
 __initcall(debugtrace_init);